import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

// 导入组件
import login from '@/views/login'
import layout from '@/layout'
import home from '@/views/home'
import ask from '@/views/ask'
import video from '@/views/video'
import mine from '@/views/mine'
import edit from '@/views/mine/edit'

const routes = [
  // 路由重定向
  { path: '', redirect: '/layout/home' },
  { name: 'login', path: '/login', component: login },
  {
    name: 'layout',
    path: '/layout',
    component: layout,
    children: [
      { name: 'home', path: 'home', component: home },
      { name: 'ask', path: 'ask', component: ask },
      { name: 'video', path: 'video', component: video },

      {
        name: 'mine',
        path: 'mine',
        component: mine,
        // meta：路由元信息（其实就是给路由打个标记）
        meta: {
          needLogin: true
        }
      },
    ]
  },
  {name: 'edit', path: '/edit', component: edit}
]


const router = new VueRouter({
  routes
})


// 导入store
import store from '@/store'
// 路由：全局前置守卫
// 在即将进入某个路由之前调用
// to：你要去哪的路由信息
// from：你从哪来路由信息
// next：是一个函数，调用next代表放行(放行的的意思是让你访问这个路由)
router.beforeEach((to, from, next) => {

  // 判断去的是不是需要登录的页面
  if (to.meta.needLogin) {
    // 是需要登录的页面
    // 判断有没有token（判断vuex里有没有token）
    if (store.state.tokenObj.token) {
      // 如果有token放行
      next()

    } else {
      // 否则打回登录页
      // 弹出提示
      Vue.prototype.$toast.fail('请先登录')
      // 放行到登录页，还要加参数，加一个原本我想去的页面的路径
      next('/login?back=' + to.path)
    }

  } else {

    // 不需要登录的页面，直接放行
    next()
  }

})

export default router
